﻿using System;
using System.Collections.Generic;
using PrintProperties.MGLHPM;
using PrintProperties.MGLHPM.Entity;

namespace TestPrintProperties
{
    class Program
    {
        static void Main(string[] args)
        {
            Clase2 clase2 = new Clase2();
            clase2.Fecha1 = DateTime.Now;
            clase2.numero = 15.25;

            Clase1 clase1 = new Clase1();
            clase1.Cadena1 = "Hola Mundo";
            clase1.entero = 45;
            clase1.Clase2 = clase2;

            Print print = new Print();
            Format format = new Format();
            format.Entity = "{0}";
            print.Format = format;

            string impresion = print.WriteEntity(clase1);

            Console.WriteLine(impresion);

            Hijo hijo = new Hijo();
            hijo.Codigo = "CodigoPadre";
            hijo.Descripcion = "Descripcion";
            hijo.Fecha1 = DateTime.Now;
            hijo.Clase1 = clase1;
            int[] ints =  new int[5];
            ints[0] = 1;
            ints[1] = 2;
            ints[2] = 3;
            ints[3] = 4;
            ints[4] = 5;
            hijo.ints = ints;

            Clase2List ListClase2 = new Clase2List();
            ListClase2.Add(new Clase2());
            ListClase2.Add(new Clase2());
            ListClase2.Add(new Clase2());
            ListClase2.Add(new Clase2());
            hijo.ListClase2 = ListClase2;

            hijo.bool1 = true;
            hijo.bool2 = false;

            hijo.NumDecimal = 15.25m;

            hijo.DemoInterface = new Demo();

            string impresion2 = hijo.ToString();

            Console.WriteLine(impresion2);

        }
    }

    abstract class Padre
    {
        public string Codigo { get; set; }

        public override string ToString()
        {
            return new Print().WriteEntity(this);
        }
    }

    class Hijo : Padre
    {
        public string Descripcion { get; set; }

        public DateTime Fecha1 { get; set; }

        public Clase1 Clase1 { get; set; }

        public int[] ints { get; set; }

        public bool bool1 { get; set; }

        public Boolean bool2 { get; set; }

        public decimal NumDecimal { get; set; }

        public Clase2List ListClase2 { get; set; }

        public IDemo DemoInterface { get; set; }
    }

    class Clase2List : List<Clase2> { }

    class Clase1
    {
        public string Cadena1 { get; set; }

        public Clase2 Clase2 { get; set; }

        public int entero { get; set; }

        public override string ToString()
        {
            return new Print().WriteEntity(this);
        }
    }

    class Clase2 
    {
        public DateTime Fecha1 { get; set; }

        public double numero { get; set; }

        public override string ToString()
        {
            return new Print().WriteEntity(this);
        }
    }

    internal interface IDemo
    {
        string ObtenerSaludo();
    }

    class Demo : IDemo
    {
        public string ObtenerSaludo()
        {
            return "Hola Mundo";
        }
    }

}
